package com.tedu.api.io;

import org.junit.jupiter.api.Test;

import java.io.File;
import java.io.IOException;

/**
 * 包位置:java.io
 * File  表示 文件或者文件夹【存在硬盘】
 * 测试：io包下创建文件 demo.txt
 * 验证项目下是否存在demo.txt文件
 * 构造器：传入路径  / \都表示路径
 *                /  表示路径，文件下载【本地】---本次测试
 *                \  表示路径，文件上传【服务器】--网络
 *       File文件/文件夹类可以做什么【常用方法】
 *       1.查看文件或者文件夹的属性信息（名字，大小，判断文件是否存在等）
 *       2.操作文件或者文件夹（创建，删除等）
 *       3.访问异格目录的子项（访问文件夹下的文件夹操作）
 *
 */
public class FileAPI {
    @Test
    public void testFile(){
        //项目结构：C/S架构---Maven---查路径---痛过Idea查路径【准】
        //找到需要查找文件夹/文件---右键---打开于---Explorer
        //src\main\java\com\tedu\api\io    char c='\\'   转义成路径：\
        //编写Java代码--任何操作平台运行--路径--封装：静态属性
        //Java编写\\情况----File.separator 静态属性可以在任何平台上转义成对应路径
        File file=new File("src"+File.separator+
                "mai"+File.separator+
                "n"+File.separator+
                "java"+ File.separator+
                "com"+ File.separator+
                "ted"+ File.separator+
                "u"+ File.separator+
                "api"+ File.separator+
                "i"+ File.separator+
                "o"+File.separator+"demo.txt");
        //验证：demo.txt文件是否存在
        boolean b=file.exists();
        System.out.println("测试文件是否存在"+b);
    }

    /**
     * getName()    返回值:String
     * 获取文件/文件夹的名字【注意：不管file是否存在，只会拿名】
     * length()   返回值：long
     * 返回当前文件的大小【字节量】---汉字：3个字节量
     * exists()    返回值：boolean
     * 判断file文件是否存在，存在true，反之
     */
    @Test
    public void testGLE(){
        File file=new File("src"+File.separator+
                "main"+File.separator+
                "java"+ File.separator+
                "com"+ File.separator+
                "ted"+ File.separator+
                "u"+ File.separator+
                "api"+ File.separator+
                "io"+ File.separator+"demo.txt");
        String str=file.getName();
        System.out.println("file文件名字是："+str);
        long length= file.length();
        System.out.println("file文件字节量是："+length);
    }
    /**
     * 操作文件或者文件夹（创建，删除）
     * createNewFile()
     * 创建新文件，创建不成功，如果不成功抛出IO流异常
     */
    @Test
    public void testCreateNewFile() throws IOException {
        //需求：用程序创建一个我呢见：text.txt
        File file=new File("src"+File.separator+
                "main"+File.separator+
                "java"+ File.separator+
                "com"+ File.separator+
                "ted"+ File.separator+
                "u"+ File.separator+
                "api"+ File.separator+
                "io"+ File.separator+"demo.txt");
        //创建text.txt---判断当前文件夹下是否存在，存在--不创建
        //                                    不存在--创建
        if (!file.exists()){ // text.txt文件不存在
            //创建文件
            System.out.println("文件是不存在");
            //file.createNewFile();
            System.out.println("文件创建完毕");
        }else{
            System.out.println("文件存在，别创建");
        }

    }
    /**
     * 拓展：存放文件位置： Maven项目：main 程序入口
     *                            test 程序测试
     *      查找：main下或者text下，必须从src位置开始找
     *      ====================
     *      “.”代表当前项目下
     *
     */
    @Test
    public void testPath() throws IOException {
        //FileAPI.java相对于项目名"API"下
        File file=new File("."+File.separator+"text.txt");
        //查看file路径
        //System.out.println(file.getCanonicalPath());
        System.out.println("API项目路径下文件是否存在"+file.exists());
    }
    /**
     * 文件删除操作
     * delete()
     * 删除已经创建完毕文件
     */
    @Test
    public void testDelete(){
        //创建File --- 找到text.txt文件
        File file=new File("."+File.separator+"text.txt");
        //删除  如果有文件  删除  没有没有  不善  三分钟
        if(file.exists()){
            System.out.println("有文件");
            file.delete();
            System.out.println("文件删除成功");
        }else{
            System.out.println("文件已经不存在，别删啦");
        }
    }
    /**
     * mkdir()
     * 在当前项目下创建异格【目录：文件夹】
     * ---周一---提升： 删除demo下所有文件夹？
     */
    @Test
    public void testMkdir(){
        //创建文件夹---创建在API文件夹下demo文件夹 --->adc文件夹 --->bcd文件夹
        File file=new File("."+File.separator+"demo"+
                File.separator+ "abc"+File.separator+"bcd");
        //创建文件夹---如果没有文件夹  创建| 有  不创建
        if(!file.exists()){
            System.out.println("没有文件夹");
            file.mkdir();
            System.out.println("创建成功~");
        }else{
            System.out.println("已经存在，别创建了~");
        }
    }
    /**
     * isDirectory()  判断是否是目录，返回true
     * isFile()       判断是否是文件，返回true
     * listFiles()    返回值：数组----File[]
     * 获取当前目录下所有的子项【包含：文件，文件夹】
     */
    @Test
    public void testListFiles(){
        //需求：获取当前”API“文件夹下  所有的文件，文件夹
        File file=new File("."+File.separator);
        //只获取文件夹
        if(file.isDirectory()){
            //获取文件夹子项
            File[] files=file.listFiles();
            //打印获取到的文件夹名字
            for(int i=0;i<files.length;i++){
                System.out.println(files[i]);
            }
        }
    }
}
